package com.bite;

public class Homework {
    //汉若塔问题的移动方法
    //每一次要先把前n-1个盘子移到辅助盘上去
    //然后再把第n个盘子移到目标盘子上去
    //最后再把辅助盘上的东西移到目标盘上去
    public static void move(char pos1, char pos2) {
        System.out.print(pos1 + "->" + pos2);
        System.out.print(" ");
    }
    public static void hanoi(int n, char pos1, char pos2, char pos3) {
        if(n == 1){
            move(pos1,pos3);
            return;
        }else {
            hanoi(n-1, pos1, pos3, pos2);
            move(pos1, pos3);
            hanoi(n-1, pos2, pos1, pos3);
        }
    }

    public static void main5(String[] args) {
        hanoi(1,'A','B', 'C' );
        System.out.println();
        hanoi(3,'A','B', 'C' );
        System.out.println();
        hanoi(4,'A','B', 'C' );
    }
    //汉若塔问题
    //每增加一个圆盘都是本次移动次数的两倍加一
    public static int han(int n){
        if(n == 1){
            return 1;
        }
        return 2*han(n-1) + 1;
    }

    public static void main4(String[] args) {

        System.out.println(han(8));
    }

    //在同一个类中定义多个方法：要求不仅可以求2个整数的最大值，还可以求3个小数的最大值？
    //考查方法的重载
    public static double max(double a, double b, double c) {
        double tmp = a > b ? a : b;
        return tmp > c ? tmp : c;
    }

    public static int max(int a, int b){
        return a > b ? a : b;
    }
    public static void main3(String[] args) {
        int a = 1;
        int b = 999;
        int c = 15;
        System.out.println(max(a, c));
        System.out.println(max(a, b, c));
    }
//    重载：

//    方法名相同
//    参数列表不同（数据类型，个数，顺序）
//    返回值无关
//    本题可以借助Java原生类Math当中的max方法求最大值，当然也可以自己通过If else进行比较。
//
//    Math的使用 不需要导入相关的包
//
//    public static int max(int a,int b) {
//        return Math.max(a,b);
//    }
//
//    public static double max(double a,double b,double c) {
//
//        double m = Math.max(a,b);
//        return Math.max(m,c);
//    }
    //定义两个求和函数一个是求两个整数之和,另一个是求三个小数之和
    //方法的重载
    public static double add(double a, double b, double c) {
        return a + b + c;
    }
    public static int add(int a, int b) {
        return a + b;
    }
    public static void main2(String[] args) {
        int a = add(1,3);
        double b = add(1.2, 3.5, 4.5);
        System.out.println(a);
        System.out.println(b);
    }
//    public static int sum(int a,int b) {
//        return a+b;
//    }
//
//    public static double sum(double a,double b,double c) {
//        return a+b+c;
//    }
    public static int max3(int a, int b,int c) {
        int max = max2(a, b);
        return max(max, c);
    }


    //注意审题是要输入三个数给一个方法,然后返回最大值
    public static int max3(int a,int max) {
        return max2(a,max);
    }

    public static int max2(int a, int b) {
        return a > b ? a : b;
    }
    public static void main(String[] args) {
        int a = 1;
        int b = 2;
        int c = 3;
        int t1 = max3(a, b, c);
        System.out.println(t1);
    }
//    public static int max2(int a,int b) {
//        return a > b ? a:b;
//    }
//
//    public static int max3(int a,int b,int c) {
//        int max = max2(a,b);
//        return max > c ? max : c;
//    }
//    public static void main(String[] args) {
//        System.out.println(max3(2, 5, 1));
//    }
}

